// app.js
const config = require('./utils/config');

App({
  onLaunch: function () {
    this.globalData = {
      // env 参数说明：
      //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
      //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
      //   如不填则使用默认环境（第一个创建的环境）
      env: config.wxConfig.cloudEnv,
      // 后端接口基础URL
      baseUrl: config.baseUrl,
      // 是否已登录
      isLoggedIn: false,
      // 用户信息
      userInfo: null
    };
    
    // 初始化云开发环境
    if (!wx.cloud) {
      console.error("请使用 2.2.3 或以上的基础库以使用云能力");
    } else {
      wx.cloud.init({
        env: this.globalData.env,
        traceUser: true,
      });
    }
    
    // 检查登录状态
    const token = wx.getStorageSync('token');
    if (token) {
      this.globalData.isLoggedIn = true;
      this.globalData.userInfo = wx.getStorageSync('userInfo') || null;
    }
    
    // 监听网络状态变化
    wx.onNetworkStatusChange(res => {
      this.globalData.isConnected = res.isConnected;
      if (!res.isConnected) {
        wx.showToast({
          title: '网络连接已断开',
          icon: 'none',
          duration: 2000
        });
      } else {
        wx.showToast({
          title: '网络已连接',
          icon: 'success',
          duration: 2000
        });
      }
    });
    
    // 全局错误监听
    wx.onError(err => {
      console.error('全局错误：', err);
      // 可以在这里添加错误上报逻辑
    });
    
    // 全局未处理Promise拒绝监听
    wx.onUnhandledRejection(res => {
      console.error('未处理的Promise拒绝：', res.reason);
      // 可以在这里添加错误上报逻辑
    });
    
    // 页面不存在监听
    wx.onPageNotFound(res => {
      console.error('页面不存在：', res.path);
      // 可以在这里添加跳转到404页面的逻辑
      wx.switchTab({
        url: '/pages/index/index'
      });
    });
  },
  
  // 全局方法：显示加载提示
  showLoading(title = '加载中') {
    wx.showLoading({
      title: title,
      mask: true
    });
  },
  
  // 全局方法：隐藏加载提示
  hideLoading() {
    wx.hideLoading();
  },
  
  // 全局方法：显示消息提示
  showToast(title, icon = 'none') {
    wx.showToast({
      title: title,
      icon: icon,
      duration: 2000
    });
  },
  
  // 全局方法：检查网络状态
  checkNetworkStatus() {
    return new Promise((resolve, reject) => {
      wx.getNetworkType({
        success: (res) => {
          if (res.networkType === 'none') {
            this.showToast('当前无网络连接，请检查网络设置');
            reject(new Error('无网络连接'));
          } else {
            resolve(res.networkType);
          }
        },
        fail: (err) => {
          this.showToast('网络状态检查失败');
          reject(err);
        }
      });
    });
  },
  
  // 全局方法：检查更新
  checkUpdate() {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager();
      updateManager.onCheckForUpdate((res) => {
        if (res.hasUpdate) {
          updateManager.onUpdateReady(() => {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好，是否重启应用？',
              success: (res) => {
                if (res.confirm) {
                  updateManager.applyUpdate();
                }
              }
            });
          });
          
          updateManager.onUpdateFailed(() => {
            wx.showModal({
              title: '更新提示',
              content: '新版本下载失败，请检查网络后重试',
              showCancel: false
            });
          });
        }
      });
    }
  }
});
